home *** CD-ROM | disk | FTP | other *** search
/ PC Gamer (Italian) 30 / PC Gamer IT CD 30 1-2.iso / MOTS / GAMEDATA / RESOURCE / JKMRES.GOO / cog_00_thrownsaber.cog < prev    next >
Text File  |  1998-02-25  |  3KB  |  90 lines

  1. # Jedi Knight Cog Script
  2. #
  3. # 00_ThrownSaber.COG
  4. #
  5. # This is the class cog of the object that is created
  6. # at the instant of the explosion on the wall.
  7. # This object will only live for a frame, but it will
  8. # create the real saber if it is running on the server.
  9. # Sadly, this will be lag dependent, but since the object
  10. # created is a powerup the server should create it...
  11. #
  12. # [YB]
  13. #
  14. # (C) 1997 LucasArts Entertainment Co. All Rights Reserved
  15.  
  16. flags=0x40
  17.  
  18. symbols
  19.  
  20. int         parent                           local
  21. int         saberDummy                       local
  22. int         saber                            local
  23.  
  24. template    saber_tpl=+fSaberReturns         local
  25.  
  26. message     created
  27. message     timer
  28.  
  29. end
  30.  
  31. # ========================================================================================
  32.  
  33. code
  34.  
  35. created:
  36.    saberDummy  = GetSenderRef();
  37.    parent      = GetThingParent(saberDummy);
  38.  
  39.    if(!IsMulti() || IsServer())
  40.    {
  41.       // we cannot use CreateThing because the explosion thing
  42.       // is already dead when the message arrives in multi...
  43.  
  44.       saber = CreateThingAtPos(saber_tpl,
  45.                                GetThingSector(saberDummy),
  46.                                GetThingPos(saberDummy),
  47.                                '0 0 0');
  48.  
  49.       SetThingUserData(saber, parent);
  50.  
  51.       SetTimerEx(0.1, 1 , 0, 0);
  52.       SetTimerEx(1.5, 2 , 0, 0);
  53.    }
  54.  
  55.    DestroyThing(saberDummy);
  56.  
  57.    Return;
  58.  
  59. # ........................................................................................
  60.  
  61. timer:
  62.  
  63.    if(GetSenderId() == 1)
  64.    {
  65.       // Returning the saber now...
  66.  
  67.       // Much faster if both the parent and the saber is in the water
  68.       if((GetSectorFlags(GetThingSector(parent)) & 2) && (GetSectorFlags(GetThingSector(saber)) & 2))
  69.          SetThingVel(saber, VectorScale(VectorNorm(VectorSub(GetThingPos(parent), GetThingPos(saber))), 15));
  70.       else
  71.       // Faster if only one of the parent or the saber is in the water
  72.       if((GetSectorFlags(GetThingSector(parent)) & 2) || (GetSectorFlags(GetThingSector(saber)) & 2))
  73.          SetThingVel(saber, VectorScale(VectorNorm(VectorSub(GetThingPos(parent), GetThingPos(saber))), 9));
  74.       // Normal speed of return if both are out of the water
  75.       else
  76.          SetThingVel(saber, VectorScale(VectorNorm(VectorSub(GetThingPos(parent), GetThingPos(saber))), 3));
  77.    }
  78.    else
  79.    if(GetSenderId() == 2)
  80.    {
  81.       // Add Gravity in case it was missed by the player
  82.       SetPhysicsFlags(saber, 0x1);
  83.       SyncThingPos(saber);
  84.    }
  85.  
  86.    Return;
  87.  
  88. end
  89.  
  90.